package org.xlp.base.application.util;

import org.xlp.tree.TreeCreatorUtils;
import org.xlp.tree.TreeNode;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

/**
 * Description: 树操作工具类
 * <br/>date: 2023/12/8 14:17
 *
 * @version 1.0
 * @author: xlp
 */
public class TreeUtils {
    /**
     * 默认根节点id
     */
    public static final String DEFAULT_ROOT_ID = "-1";
    /**
     * 更据给定的数据，创建出一颗树
     * @param source
     * @param <T>
     * @param <S>
     * @param filterRootId 要过滤的根节点id
     * @return 返回创建好的树信息，假如参数为空，则返回空集合
     */
    public static <T, S extends TreeNode<T, S>> List<S> treeCreate(List<S> source, T filterRootId){
        if (source == null) return new ArrayList<>(0);

        List<S> filterData = new ArrayList<>();
        TreeCreatorUtils.treeCreate(source).forEach(item -> {
            if (Objects.equals(filterRootId, item.getParentId())){
                filterData.add(item);
            }
        });
        return filterData;
    }

    /**
     * 更据给定的数据，创建出一颗树
     * @param source
     * @param <S>
     * @return 返回创建好的树信息，假如参数为空，则返回空集合
     */
    public static <S extends TreeNode<String, S>> List<S> treeCreate(List<S> source){
       return treeCreate(source, DEFAULT_ROOT_ID);
    }
}
